//
//  StatusListViewModel.swift
//  Weibo10
//
//  Created by Leon on 15/10/18.
//  Copyright © 2015年 Leon. All rights reserved.
//

import Foundation
import SDWebImage

class StatusListViewModel {

    /// 微博数组模型: 为了上拉，下拉刷新
    lazy var statusList = [StatusViewModel]()
    
    ///  下载微博数据
    ///
    ///  - parameter isPulled: 判断是否上拉
    ///  - parameter finished: 完成回调
    func loadStatus(isPulled isPulled:Bool, finished: (isSuccessed: Bool) -> ()) {
        
        // 上拉
        let max_id  = isPulled ? (statusList.last?.status.id ?? 0) : 0
        // 下拉
        let since_id = isPulled ? 0 : (statusList.first?.status.id ?? 0)
        
        NetworkTools.shareTools.loadStatus(since_id: since_id, max_id: max_id) { (result, error) -> () in
            
            // 1 判断是否有错
            if error != nil {
                finished(isSuccessed: false)
                print("loadStatus 出错")
                return
            }
            
            // 2 判断数据类型
            guard let array = result?["statuses"] as? [[String: AnyObject]] else {
                print("loadStatus 格式错误")
                return
            }
            
            // 3 遍历数组转模型
            var arrayM = [StatusViewModel]()
            for dict in array {
                
                arrayM.append(StatusViewModel(status: Status(dict: dict)))
            }
            
            print("下载到\(array.count)条数据")
            
            // 4 拼接数组
            
            if since_id > 0 {
                
                self.statusList = arrayM + self.statusList
            } else {
                self.statusList += arrayM
            }
            
            // 5 缓存图片并回调
            self.cacheSingleImage(arrayM, finished: finished)
            
        }
    }
    
    // 缓存图片并回调
    private func cacheSingleImage(dataArr: [StatusViewModel], finished: (isSuccessed: Bool) -> ()) {
        // 0 创建调度组
        let group = dispatch_group_create()
        //  缓存的大小
        var dataLength = 0
        
        // 1 遍历数组
        for vm in dataArr {
            // 1>只缓存单张图片
            if vm.thumbnailUrls?.count != 1 {
                continue
            }
            
             // 2> 获取 url
            let url = vm.thumbnailUrls![0]
            
            // SDWebImage - 下载图像(缓存是自动完成的)
            // 入组 - 监听后续的 block
            dispatch_group_enter(group)
            
            // 3> 下载图片
            SDWebImageManager.sharedManager().downloadImageWithURL(
                url,                                            // 图片的url
                options: [.RetryFailed, .RefreshCached],        // 选项，1.不加入黑名单 2.超时继续获取
                progress: nil,                                  // 进度
                completed: { (image, _, _, _, _) -> Void in     // 完成回调
                  
                    if let img = image, let data = UIImagePNGRepresentation(img){
                        
                        // 累加到二进制数据
                        dataLength += data.length
                    }
                    // 出组
                    dispatch_group_leave(group)
            })
            
        }
        
        // 3. 监听调度组完成
        dispatch_group_notify(group, dispatch_get_main_queue()) { () -> Void in
            print("缓存完成 \(dataLength / 1024) K")
            
            finished(isSuccessed: true)
        }
    }
}





